package com.zb.service;

import com.zb.view.ViewGoods;
import com.zb.vo.GoodsBoomSelectVo;
import com.zb.vo.GoodsSelectVo;
import com.zb.vo.OrderGoodsSelectVo;

import java.util.List;
import java.util.Map;

/**
 * @Author WEN
 * @Date 2024/1/13 0013
 **/
public interface ViewGoodsService {

    /**
     * 根据[商品ID] & [商品规格ID]查询
     * @param goodsIds 商品ID
     * @param goodsSpecIds 商品规格ID
     * @return
     */
    List<ViewGoods> getByGoodsIdsAndGoodsSpecIds(List<Long> goodsIds, List<Long> goodsSpecIds);

    /**
     * 获取出入库商品
     * @param custAccId 商家ID
     * @param type 商品类型：1-成品，2-配件
     * @param goodsSelectVo 商品搜索条件
     * @return
     */
    Map<String, Object> getInOrOutStoreGoods(Long custAccId, Integer type, OrderGoodsSelectVo goodsSelectVo);

    /**
     * 获取商品导出Excel数据
     * @param custAccId 商家ID
     * @param type 类型：1-成品，2-配件
     * @param selectVo 搜索对象
     * @return
     */
    List<ViewGoods> getGoodsExportExcel(Long custAccId, Integer type, GoodsSelectVo selectVo);

    /**
     * 获取商品导出Excel数据总数量
     * @param custAccId 商家ID
     * @param type 类型：1-成品，2-配件
     * @param selectVo 搜索对象
     * @return
     */
    long getGoodsExportExcelCount(Long custAccId, Integer type, GoodsSelectVo selectVo);

    /**
     * 根据商家ID与商品类型获取商品信息
     * @param custAccId 商家ID
     * @param type 类型：1-成品，2-配件
     * @return
     */
    List<ViewGoods> getByCustAccIdAndType(Long custAccId, Integer type);

    /**
     * 根据商家ID查询商品信息
     * @param custAccId 商家ID
     * @return
     */
    List<ViewGoods> getGoodsExportByCustAccId(Long custAccId);

    /**
     * 根据商家ID查询成品信息
     * @param custAccId 商家ID
     * @return
     */
    List<ViewGoods> getProductExportByCustAccId(Long custAccId);

    /**
     * 根据[商品类型]&[商品ID]&[商品规格ID]
     * @param goodsType 商品类型：1-成品，2-配件
     * @param goodsId 商品ID
     * @param goodsSpecId 商品规格ID
     * @return
     */
    ViewGoods getByGoodsTypeAndGoodsIdAndGoodsSpecId(Integer goodsType, Long goodsId, Long goodsSpecId);

    /**
     * 获取工单报单产品
     * @param custAccId 商家ID
     * @param goodsSelectVo 搜索条件
     * @return
     */
    Map<String, Object> getOrderProduct(Long custAccId, OrderGoodsSelectVo goodsSelectVo);

    /**
     * 获取Boom关联的商品列表
     * @param custAccId 商家ID
     * @param goodsType 商品类型：1-成品，2-配件
     * @param id 产品ID，获取Boom关联时，排除自身
     * @param selectVo 搜索条件
     * @return
     */
    Map<String, Object> getGoodsBoomList(Long custAccId, Integer goodsType, Long id, GoodsBoomSelectVo selectVo);

}
